package com.example.mongodb_learn;

import com.mongodb.client.MongoCollection;
import org.bson.Document;
import org.springframework.boot.autoconfigure.web.ConditionalOnEnabledResourceChain;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;

/**
 * MongoDbTemplate 操作mongodb数据库
 */
@Component
public class MongoDbTemplateTest {
    @Resource
    private MongoTemplate template;
    /**
     * 新增文档使用默认的集合
     */
    public void test1(){
        Student student =  new Student();
        student.setAge(1);
        student.setName("zkz1");
        student.setStuId(3);
       template.insert(student); //默认插入实体类配置的集合中
    }

    /**
     * 新增文档 使用自定义集合
     */
    public void test2(){
        Student student =  new Student();
        student.setAge(1);
        student.setName("zkz1");
        student.setStuId(3);

        template.insert(student,"高三三班");
    }

    /**
     * 新增文档 批量插入 也是insert方法
     */
    public void test3(){
        Student student =  new Student();
        student.setAge(1);
        student.setName("zkz4");
        student.setStuId(4);

        Student student2 =  new Student();
        student2.setAge(1);
        student2.setName("zkz5");
        student2.setStuId(5);

        List<Student> students = new ArrayList<>();
        students.add(student);
        students.add(student2);

        template.insertAll(students);//插入多条文档
//        template.insert(students,"高三三班");
    }
    /**
     * 存储文档 save根据文档的主键_id字段来查询匹配，找到就更新对应文档记录，没有找到就新增记录
     */
    public void test4(){
        Student student =  new Student();
        student.setName("这个是无名学生");
        student.setStuId(4);
        //不支持插入集合，匹配到_id为4的文档记录，更新对应记录的值
        //不设置int类型字段，会默认取值为0
        template.save(student,"高三三班");
    }

    /**
     * 存储文档 save根据文档的主键_id字段来查询匹配，找到就更新对应文档记录，没有找到就新增记录
     *        //可以直接修改文档的结构类型，只需要匹配_id主键Id就行
     */
    public void test5(){
        ConcurrentHashMap<Object,Object> userInfo = new ConcurrentHashMap<>();
        userInfo.put("_id",4);
        userInfo.put("dddd","dadaw");
        //不支持插入集合，匹配到_id为4的文档记录，更新对应记录的值

        template.save(userInfo,"高三三班");
    }




    /**
     * 存储文档 save根据文档的主键_id字段来查询匹配，找到就更新对应文档记录，没有找到就新增记录
     *
     */
    public void test6(){
        ConcurrentHashMap<Object,Object> userInfo = new ConcurrentHashMap<>();
        userInfo.put("_id",7);
        userInfo.put("dddd","dadaw");

        template.save(userInfo,"高三三班");
    }

    /**
     * 存储文档 save根据文档的主键_id字段来查询匹配，找到就更新对应文档记录，没有找到就新增记录
     *
     */
    public void test7(){
        ConcurrentHashMap<Object,Object> userInfo = new ConcurrentHashMap<>();
        userInfo.put("_id",7);
        userInfo.put("dddd","dadaw做修改");
        userInfo.put("sddddd","dadaw");
//        userInfo.put("张康泽","234"); //注意，不支持key直接为中文字符存储，不然会出现脏数据

        template.save(userInfo,"高三三班");
    }


}
